/*
 * This file or a portion of this file is licensed under the terms of
 * the Globus Toolkit Public License, found in file GTPL, or at
 * http://www.globus.org/toolkit/download/license.html. This notice must
 * appear in redistributions of this file, with or without modification.
 *
 * Redistributions of this Software, with or without modification, must
 * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
 * some other similar material which is provided with the Software (if
 * any).
 *
 * Copyright 1999-2004 University of Chicago and The University of
 * Southern California. All rights reserved.
 */
package edu.isi.pegasus.planner.invocation;

import java.util.*;
import java.io.Writer;
import java.io.IOException;

/**
 * This class is the base class for a file object.
 *
 * @author Jens-S. Vöckler
 * @author Yong Zhao
 * @version $Revision$
 */
public abstract class File extends Invocation implements HasText
{
  /**
   * optional first 16 byte of file, or less if shorter.
   */
  protected String m_hexbyte;

  /**
   * Default c'tor: Construct a hollow shell and allow further
   * information to be added later.
   */
  public File()
  {
    m_hexbyte = null;
  }

  /**
   * C'tor: Constructs the value in the base class.
   * @param value is all or part of the hex bytes.
   */
  public File( String value )
  {
    m_hexbyte = value;
  }

  /**
   * Appends a piece of text to the existing text. 
   * @param fragment is a piece of text to append to existing text.
   * Appending <code>null</code> is a noop.
   */
  public void appendValue( String fragment )
  {
    if ( fragment != null ) {
      if ( this.m_hexbyte == null ) this.m_hexbyte = new String(fragment);
      else this.m_hexbyte += fragment;
    }
  }

  /**
   * Accessor
   *
   * @see #setValue(String)
   */
  public String getValue()
  { return this.m_hexbyte; }

  /**
   * Accessor.
   *
   * @param hexbyte
   * @see #getValue()
   */
  public void setValue( String hexbyte )
  { this.m_hexbyte = hexbyte; }

  /**
   * Converts the active state into something meant for human consumption.
   * The method will be called when recursively traversing the instance
   * tree. 
   *
   * @param stream is a stream opened and ready for writing. This can also
   * be a string stream for efficient output.
   */
  public void toString( Writer stream )
    throws IOException
  { 
    throw new IOException( "method not implemented, please contact vds-support@griphyn.org" );
  }
}
